# 导入基本模块  注意要先下载    镜像网站  -i https://pypi.tuna.tsinghua.edu.cn/simple/
# import requests
# from bs4 import BeautifulSoup
# import selenium
#
# # print("ok");
# url = "https://pan-baidu.vip/m.htm"
#
# r = requests.get(url);
#
# print(r.status_code)
#
# # print(r.encoding)
#
# # print(r.headers)
#
# print(r.text)
# # print(r.content)

# 尚硅谷爬虫
"""一般方法"""
# urllib使用 导入方库
import urllib.request

#
# # 定义一个地址URL
# url = "https://www.baidu.com"
#
# # 模拟浏览器向服务器发送请求 这里是打开对应网站  response响应
# response = urllib.request.urlopen(url)
#
# # 获取响应的源码
# # read 返回的是字节形式的二进制数据
# # 将二进制转化为字符串 ——解码——utf-8
# # decode(“编码的格式”)  ——在html代码中的meta标签中的charset属性中可以查看
# content = response.read().decode('utf-8')
#
# 一个类型六个方法
# 返回网页状态码 不是200说明访问失败
# print(response.getcode())
# print(response.geturl())
# # 打印数据
# print(content)
# 这里只获取到一部分，因为被反爬虫了

"""解码-具体爬虫细节
# 比如获取网页地址的时候经常有  %A3%B0……  这样的就是加密后的

#这里wd= 之后的&之前的是加密后的"周杰伦" 如果想要加密其他的汉字
# 这里必须获取网址源码 后续多个参数传递的时候要按照此格式更改
# url  = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&fenlei=256&rsv_pq=0xb704e16b02939017&rsv_t=9db4D5k4RMT8kYqHdGU4Bj68R47KyKZa3t8uPQSbqqKAqN8G9ybNyQr1PRai&rqlang=en&rsv_enter=1&rsv_dl=tb&rsv_sug3=10&rsv_sug1=5&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&prefixsug=%25E5%2591%25A8%25E6%259D%25B0%25E4%25BC%25A6&rsp=4&inputT=2419&rsv_sug4=3145"

# 将周杰伦变成Unicode编码的格式 使用urllib.parse
import urllib.parse
name = urllib.parse.quote("周杰伦")
# print(name)

多个文字参数时
# 使用urlencode
# 举例
import urllib.parse
data = {
    'wd':'周杰伦'
    'sex':'男'
}
data = urllib.parse.urlencode(data)
print(data)

# 单个参数
url = 'https://www.baidu.com/s?wd='
url = url+name

#多个参数
url = 'https://www.baidu.com/s?wd='
url = url+data

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'}

request  = urllib.request.Request(url=url, headers=headers)
如果要返回的东西是post请求的
# post请求的参数必须编码
data = urllib.parse.urlencode(data).encode('utf-8')  这里的data要根据“网络”具体的接口中的“表单数据”来写
# post请求的参数是不会拼接到url后面的 
request = urllib.request.Request(url=url, data =data ,headers=headers)
response = urllib.request.urlopen(request)

content = response.read().decode('utf-8')

print(content)
"""
"""请求之post"""

# 相关的代码可以看尚硅谷的

# Cookie 登录 获取数据的时候需要绕过登录时才用
# 个人信息页面是utf-8（右键页面-查看源代码） 但是还是报了编码错误，因为并没有进入到个人信息页面，而是跳转到登录页面
# 那么登录页面不是utf-8 所以报错

# handler处理器
# 代理IP


"""
# 代理服务器使用
import urllib.request

url = 'http://www.baidu.com/s?wd=ip'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)

# 模拟浏览器访问服务器
# response = urllib.request.urlopen(request)

# 代理ip 可以在https://www.kuaidaili.com/free/上面买一个
# 购买之后点击-我的订单-生成API链接——生成链接-复制API链接并用浏览器打开, 出现的就是ip
proxies = {
    # ip填写在后面 前面都是http
    'http': '118.24.219.151:16817'
}

# 一般不用单个代理 而是使用代理池
proxies_pool = [
    {'http':'118.24.219.151:16817'},
    {'http':'118.24.219.151:16817'},
    # 多多益善   =-)
]

import random

proxies = random.choice(proxies_pool)

# handler  build_opener  open
handler = urllib.request.ProxyHandler(proxies=proxies)

opener = urllib.request.build_opener(handler)

response = opener.open(request)

# 获取响应的信息
content = response.read().decode('utf-8')

# 保存
with open('daili.html', 'w', encoding='utf-8') as fp:
    fp.write(content)
"""

# 解析 对爬取出来的内容进行筛选   教程https://blog.csdn.net/luxideyao/article/details/77802389
# 这里讲解Xpath和jsonpath

# jsonpath的使用
# import jsonpath
# import json
# import urllib.request
#
# url = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1629789477003_137&jsoncallback=jsonp138&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'
#
# headers = {
#     # 一般情况下 冒号的请求头是要注释的
#     # ':authority': 'dianying.taobao.com',
#     # ':method': 'GET',
#     # ':path': '/cityAction.json?activityId&_ksTS=1629789477003_137&jsoncallback=jsonp138&action=cityAction&n_s=new&event_submit_doGetAllRegion=true',
#     # ':scheme': 'https',
#     'accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
#     # 'accept-encoding': 'gzip, deflate, br',
#     'accept-language': 'zh-CN,zh;q=0.9',
#     'cookie': 'cna=UkO6F8VULRwCAXTqq7dbS5A8; miid=949542021157939863; sgcookie=E100F01JK9XMmyoZRigjfmZKExNdRHQqPf4v9NIWIC1nnpnxyNgROLshAf0gz7lGnkKvwCnu1umyfirMSAWtubqc4g%3D%3D; tracknick=action_li; _cc_=UIHiLt3xSw%3D%3D; enc=dA18hg7jG1xapfVGPHoQCAkPQ4as1%2FEUqsG4M6AcAjHFFUM54HWpBv4AAm0MbQgqO%2BiZ5qkUeLIxljrHkOW%2BtQ%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; thw=cn; _m_h5_tk=3ca69de1b9ad7dce614840fcd015dcdb_1629776735568; _m_h5_tk_enc=ab56df54999d1d2cac2f82753ae29f82; t=874e6ce33295bf6b95cfcfaff0af0db6; xlly_s=1; cookie2=13acd8f4dafac4f7bd2177d6710d60fe; v=0; _tb_token_=e65ebbe536158; tfstk=cGhRB7mNpnxkDmUx7YpDAMNM2gTGZbWLxUZN9U4ulewe025didli6j5AFPI8MEC..; l=eBrgmF1cOsMXqSxaBO5aFurza77tzIRb8sPzaNbMiInca6OdtFt_rNCK2Ns9SdtjgtfFBetPVKlOcRCEF3apbgiMW_N-1NKDSxJ6-; isg=BBoas2yXLzHdGp3pCh7XVmpja8A8S54lyLj1RySTHq14l7vRDNufNAjpZ2MLRxa9',
#     'referer': 'https://dianying.taobao.com/',
#     'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
#     'sec-ch-ua-mobile': '?0',
#     'sec-fetch-dest': 'empty',
#     'sec-fetch-mode': 'cors',
#     'sec-fetch-site': 'same-origin',
#     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
#     'x-requested-with': 'XMLHttpRequest',
# }
#
# request = urllib.request.Request(url=url, headers=headers)
#
# response = urllib.request.urlopen(request)
#
# content = response.read().decode('utf-8')
#
# # split 切割
# content = content.split('(')[1].split(')')[0]
#
# with open('074_尚硅谷_爬虫_解析_jsonpath解析淘票票.json', 'w', encoding='utf-8') as fp:
#     fp.write(content)
#
# import json
# import jsonpath
#
# obj = json.load(open('074_尚硅谷_爬虫_解析_jsonpath解析淘票票.json', 'r', encoding='utf-8'))
#
# city_list = jsonpath.jsonpath(obj, '$..regionName')
#
# print(city_list)


#